home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / ms_dos / tool / txf / src / txfcfile.c < prev    next >
C/C++ Source or Header  |  1994-05-05  |  5KB  |  197 lines

  1. /*====================================================================
  2.  *
  3.  * TXF command file module
  4.  *
  5.  *====================================================================
  6.  *                                   copyright(C) 1992-1994 T.Nakatani
  7.  *====================================================================
  8.  */
  9. #include "txf.h"
  10.  
  11. void read_def(char *own)
  12. {
  13.     struct find_t filedata;
  14.     char *period, buf[80], *txfdef;
  15.  
  16.     if ((txfdef = getenv("TXFDEF")) != NULL) {
  17.         strncpy(buf, txfdef, 80);
  18.         if (_dos_findfirst(buf,
  19.                 _A_ARCH | _A_NORMAL | _A_RDONLY, &filedata) != 0) {
  20.             if ((strchr(buf, '\0')-1) != (jstrrchr(buf,'\\')))
  21.                 strcat(buf, "\\");
  22.             strcat(buf, "TXF.DEF");
  23.         }
  24.     }
  25.     else {
  26.         strcpy(buf, own);
  27.         period=strchr(buf, '.');
  28.         strcpy(period, ".DEF");
  29.     }
  30.     if (_dos_findfirst(buf, _A_ARCH | _A_NORMAL | _A_RDONLY, &filedata) == 0)
  31.         read_commandfile(buf, 0);
  32.  
  33. /*
  34.         fprintf(stderr,"Special:DEF FILE:%s\n",buf);
  35. */
  36. }
  37.  
  38. void savemem(char chr)
  39. {
  40.  
  41.     *(fbuf+fbufptr) = chr;
  42.     fbufptr++;
  43.     if (fbufptr >= (fbufsize * 1024)) {
  44.         fbufsize++;
  45.         fbuf = farrealloc(fbuf, fbufsize*1024);
  46.         if (fbuf == NULL) {
  47.             fprintf(stderr, "Error:Heap Error at commandfile(%d)",
  48.                 fbufsize*1024);
  49.             errexit("Too long command / DEF parameters.");
  50.         }
  51. /*        if (fbufsize > 3) {
  52.             rbufsize = 16384;
  53.         }
  54. */
  55. /*
  56.         printf("fbuf=%Nd,fbufptr=%d,fbufsize=%d, chr=0x%X, next=0x%X\n",fbuf, fbufptr,fbufsize, chr,fbuf[fbufptr+1]);
  57. */
  58.     }
  59. }
  60.  
  61. void read_commandfile(char *commandfile, int level)
  62. {
  63.     FILE *fr;
  64.     int paraptr=0, chr=0;
  65.     char *ptr,*txfpath;
  66.     char filename[80];
  67.     struct find_t filedata;
  68.     static int fbufbase=0;
  69.  
  70.     if (((txfpath = getenv("TXFPATH")) != NULL) && level) {
  71. /*        fprintf(stderr, "0:%s\n", filename);    */
  72.         if ((*commandfile != '\\') && (*(commandfile+1) != ':')) {
  73.             strncpy(filename, txfpath, 80);
  74.             if ((strchr(filename, '\0') - 1) != (jstrrchr(filename, '\\'))) {
  75.                 strcat(filename, "\\");
  76.             }
  77.         }
  78.         else {
  79.             *filename = NUL;
  80.         }
  81.         strcat(filename, commandfile);
  82.     }
  83.     else {
  84.         strcpy(filename, commandfile);
  85.     }
  86. /*    fprintf(stderr, "1:%s\n", filename);    */
  87.  
  88.     ptr = jstrrchr(filename, '\\');
  89.     if (ptr == NULL) ptr = filename;
  90.     if (strchr(ptr, '.') == NULL) strcat(filename, ".TXF");
  91.     if (_dos_findfirst(filename,
  92.             _A_ARCH | _A_NORMAL | _A_RDONLY, &filedata) != 0) {
  93.         strcpy(filename, commandfile);
  94.         if (strchr(ptr, '.') == NULL) strcat(filename, ".TXF");
  95. /*        fprintf(stderr, "2:%s\n", filename);    */
  96.     }
  97. /*    fprintf(stderr, "3:%s\n", filename);    */
  98.  
  99.     fbufbase = fbufptr;
  100.     if (_dos_findfirst(filename,
  101.             _A_ARCH | _A_NORMAL | _A_RDONLY, &filedata) == 0) {
  102.  
  103.         fr = fopen(filename, "r");
  104.         if (fr == NULL) {
  105.             fprintf(stderr, "Info:filename=<%s>\n", filename);
  106.             errexit("cannot open DEF/command file\n");
  107.         }
  108.         if (fbufsize == 0) {
  109.             fbuf = farmalloc(4096);
  110.             if (fbuf == NULL) {
  111.                 errexit("Heap Error at(read DEFfile)");
  112.             }
  113.             fbufsize = 4;
  114.         }
  115.         while (chr != EOF) {
  116.             chr = getc(fr);
  117.             if (chr == EOF) continue;
  118.             if (chr == sep) {
  119.                 chr = getc(fr);
  120.                 while ((chr != EOF) && (chr != sep)) {
  121.                     savemem(chr);
  122.                     chr=getc(fr);
  123.                 }
  124.                 savemem(NUL);
  125.             }
  126.             else if (chr == '#') {
  127.                 while ((chr != EOF) && (chr != '\n')) chr = getc(fr);
  128.             }
  129.             else if (chr > ' ') {
  130.                 paraptr = fbufptr;
  131.                 while ((chr != EOF) && (chr > ' ')) {
  132.                     savemem(chr);
  133.                     chr = getc(fr);
  134.                 }
  135.                 savemem(NUL);
  136.                 if ((*(fbuf+paraptr) == '-') && ((*(fbuf+paraptr+1) == 's') ||
  137.                         (*(fbuf+paraptr+1) == 'S'))) {
  138.                     while ((chr != EOF) && (chr <= ' ')) chr = getc(fr);
  139.                     if (chr != EOF) sep = chr;
  140.                     savemem(chr);
  141.                     savemem(NUL);
  142.                 }
  143.             }
  144.         }
  145.         savesw(fbufbase);
  146.     }
  147.     else {
  148.         if (viewmode > 0) {
  149.             fprintf(stderr,
  150.                 "Warning:commandfile'%s' is not found...\n", filename);
  151.         }
  152.     }
  153. }
  154.  
  155. void savesw(int base)
  156. {
  157.     static int i = 0;
  158.     int j;
  159.     char far *ptr;
  160. /*    char *env;    */
  161.  
  162.     while ((i > 0) && (*(para + i-1) == NULL)) {
  163.         i--;
  164.     }
  165.     j = i;
  166.     ptr = (fbuf + base);
  167.     while ((ptr - fbuf) < fbufptr) {
  168.         if (*ptr == NUL) {
  169.             ptr++;
  170.         }
  171.         else {
  172.             *(para + i) = ptr;
  173.             i += 1;
  174.             if (i >= PARA_MAX) {
  175.                 errexit("too many parameters");
  176.             }
  177.             ptr = far_strchr(ptr, NUL);
  178.         }
  179.     }
  180.     *(para + i) = NULL;
  181.  
  182. /*
  183.     if ((env = getenv("TXF")) != NULL) {
  184.         if (strcmp(env,"TEST") == 0) {
  185.             for (k = 0; k < i; k++) {
  186.                 fprintf(stderr, "Info:PARA[%d]=<%s>\n", k, nrcpy(*(para+k)));
  187.             }
  188.             fprintf(stderr, "Info:(i,j)=(%d,%d)\n", i, j);
  189.         }
  190.     }
  191. */
  192.  
  193.     swchk(i - j, para + j);
  194.  
  195. }
  196.  
  197.